6.1. [INTEGRITY_SOAP_01] Integrità del payload del messaggio SOAP¶
Il presente profilo estende ID_AUTH_SOAP_01 o ID_AUTH_SOAP_02, aggiungendo alla comunicazione tra fruitore ed erogatore a livello di messaggio:
- integrità del payload del messaggio.
6.1.1. Descrizione¶
Il presente profilo specializza lo standard OASIS Web Services Security X.509 Certificate Token Profile Versione 1.1.1.
Si assume l’esistenza di un trust tra fruitore ed erogatore, che permette il riconoscimento da parte dell’erogatore del certificato X.509, o la CA emittente.
Il meccanismo con cui è stabilito il trust non condiziona il presente profilo.
Il fruitore inoltra un messaggio all’interfaccia di servizio dell’erogatore includendo o referenziando il certificato X.509 e la firma del payload del messaggio.
L’erogatore, ricevuto il messaggio, verifica il certificato X.509 e valida l’integrità del payload del messaggio firmato. Se la verifica e la validazione sono superate, l’erogatore elabora la richiesta e produce la relativa risposta.
Figura 7 - Integrità del payload del messaggio
6.1.2. Regole di processamento¶
A: Richiesta
- Il fruitore costruisce un messaggio SOAP per il servizio.
- Il fruitore calcola la firma del payload del messaggio usando l’XML Signature. Il digest è firmato usando la chiave privata associata al certificato X.509 del fruitore. L’elemento <Signature> è posizionato nell’header <Security> del messaggio.
- Il fruitore referenzia il certificato X.509 usando in maniera
alternativa, nell’header <Security>, i seguenti elementi previsti
nella specifica ws-security:
- <wsse:BinarySecurityToken>
- <wsse:KeyIdentifier>
- <wsse:SecurityTokenReference>
- Il fruitore spedisce il messaggio all’interfaccia di servizio dell’erogatore.
B: Risultato
- L’erogatore recupera il certificato X.509 referenziato nell’header <Security>.
- L’erogatore verifica il certificato secondo i criteri del trust.
- L’erogatore valida la firma verificando l’elemento <Signature> nell’header <Security>.
- Se il certificato è valido anche per identificare il soggetto fruitore, l’erogatore autentica lo stesso
- Se le azioni da 5 a 8 hanno avuto esito positivo, il messaggio viene elaborato e viene restituito il risultato del servizio richiamato
Note:
- Per quanto riguarda gli algoritmi da utilizzare nell’elemento <Signature> rispettivamente <DigestMethod> , <SignatureMethod> e <CanonicalizationMethod> si fa riferimento agli algoritmi indicati nelle Linee Guida sulla sicurezza, emanate dall’Agenzia per l’Italia Digitale ai sensi dell’articolo 71 del decreto legislativo 7 marzo 2005, n. 82 (Codice dell’Amministrazione Digitale).
- Un meccanismo simile può essere utilizzato per garantire l’integrità del payload del messaggio risposta dell’erogatore al fruitore.
6.1.3. Esempio¶
Di seguito è riportato un tracciato del messaggio inoltrato dal fruitore all’interfaccia di servizio dell’erogatore.
I namespace utilizzati nel tracciato sono riportati di seguito:
soap="http://schemas.xmlsoap.org/soap/envelope/"
wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
ds="http://www.w3.org/2000/09/xmldsig#"
ec="http://www.w3.org/2001/10/xml-exc-c14n#"
<?xml version="1.0"?>
<soap:Envelope>
<soap:Header>
<wsse:Security soap:mustUnderstand="1">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x5 09-token-profile-1.0#X509v3" wsu:Id="X509-44680ddc-e35a-4374-bcbf-2b6dcba722d7">MIICyzCCAb OgAwIBAgIECxY+9TAhkiG9w...</wsse:BinarySecurityToken>
<ds:Signature Id="SIG-f58c789e-e3d3-4ec3-9ca7-d1e9a4a90f90">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soap"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="#bd-567d101-aed1-789e-81cb-5ae1c5dbef1a">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soap"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>0cJNCJ1W8Agu66fGTXlPRyy0EUNUQ9OViFlm8qf8Ysw=* *</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>AIrDa7ukDfFJD867goC+c7K3UampxpX/Nj/...</ds:SignatureValue>
<ds:KeyInfo Id="KI-cad9ee47-dec8-4340-8fa1-74805f7e26f8">
<wsse:SecurityTokenReference wsu:Id="STR-e193f25f-9727-4197-b7aa-25b01c9f2ba3">
<wsse:Reference URI="#X509-44680ddc-e35a-4374-bcbf-2b6dcba722d7" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soap:Header>
<soap:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:id="bd-567d101-aed1-789e-81cb-5ae1c5dbef1a">
<ns2:sayHi xmlns:ns2="http://example.profile.security.modi.agid.gov.it/">
<arg0>Hello World!</arg0>
</ns2:sayHi>
</soap:Body>
</soap:Envelope>
Il codice rispecchia alcune scelte implementative esemplificative in merito:
- riferimento al security token (BinarySecurityToken)
- algoritmi di canonizzazione (CanonicalizationMethod)
- algoritmi di firma (SignatureMethod)
- algoritmo per il digest (DigestMethod)
Le parti, in base alle proprie esigenze, individuano gli specifici algoritmi secondo quanto indicato nelle Linee Guida sulla sicurezza, emanate dall’Agenzia per l’Italia Digitale ai sensi dell’articolo 71 del decreto legislativo 7 marzo 2005, n. 82 (Codice dell’Amministrazione Digitale).